package com.haredot.utils;

import java.io.ByteArrayOutputStream;
import java.util.Base64;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

public class JWTGzipCompression {

    // 压缩JWT令牌
    public static String compressJWTToken(String jwtToken) throws Exception {
        // 将JWT令牌转换为字节数组
        byte[] jwtTokenBytes = jwtToken.getBytes();

        // 使用Gzip压缩
        Deflater deflater = new Deflater();
        deflater.setInput(jwtTokenBytes);
        deflater.finish();

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        while (!deflater.finished()) {
            int count = deflater.deflate(buffer);
            outputStream.write(buffer, 0, count);
        }
        deflater.end();

        byte[] compressedBytes = outputStream.toByteArray();
        outputStream.close();

        // 使用Base64编码，以确保数据可以在HTTP请求中传输
        String encodedCompressedJWTToken = Base64.getEncoder().encodeToString(compressedBytes);
        return encodedCompressedJWTToken;
    }

    // 解压缩JWT令牌
    public static String decompressJWTToken(String encodedCompressedJWTToken) throws Exception {
        // 使用Base64解码
        byte[] compressedBytes = Base64.getDecoder().decode(encodedCompressedJWTToken);

        // 使用Gzip解压缩
        Inflater inflater = new Inflater();
        inflater.setInput(compressedBytes);

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        while (!inflater.finished()) {
            int count = inflater.inflate(buffer);
            outputStream.write(buffer, 0, count);
        }
        inflater.end();

        byte[] decompressedBytes = outputStream.toByteArray();
        outputStream.close();
        // 将解压缩后的字节数组转换回JWT令牌
        String jwtToken = new String(decompressedBytes);
        return jwtToken;
    }

    public static void main(String[] args) {
        try {
            String originalJWTToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJoYXJlZG90IiwiZXhwIjoxNjg5ODM0OTUwLCJpc3MiOiJoYXJlZG90IiwiaWF0IjoxNjg5ODM0NjUwLCJhdXRob3JpdGllcyI6Ilt7XCJhdXRob3JpdHlcIjpcIjlcIixcImlkXCI6OSxcImxldmVsXCI6MSxcIm5hbWVcIjpcIuadg-mZkOeuoeeQhuezu-e7n1wiLFwicGlkXCI6MCxcInJlbWFya1wiOlwiOVwiLFwidXJsXCI6XCJodHRwOi8vbG9jYWxob3N0OjgwODBcIn0se1wiYXV0aG9yaXR5XCI6XCJtZW51OnF1ZXJ5XCIsXCJpZFwiOjI4LFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5p-l6K-iXCIsXCJwaWRcIjo2LFwicmVtYXJrXCI6XCJtZW51OnF1ZXJ5XCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcIm1lbnU6YWRkXCIsXCJpZFwiOjYsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmt7vliqDoj5zljZVcIixcInBpZFwiOjYsXCJyZW1hcmtcIjpcIm1lbnU6YWRkXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcIm1lbnU6YmF0Y2g6ZGVsXCIsXCJpZFwiOjcsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmibnph4_liKDpmaRcIixcInBpZFwiOjYsXCJyZW1hcmtcIjpcIm1lbnU6YmF0Y2g6ZGVsXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcIm1lbnU6dXBkYXRlXCIsXCJpZFwiOjgsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLkv67mlLlcIixcInBpZFwiOjYsXCJyZW1hcmtcIjpcIm1lbnU6dXBkYXRlXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcIm1lbnU6ZGVsXCIsXCJpZFwiOjksXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLliKDpmaRcIixcInBpZFwiOjYsXCJyZW1hcmtcIjpcIm1lbnU6ZGVsXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcIm9yZzpxdWVyeTp1c2VyXCIsXCJpZFwiOjIwLFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5p-l55yL5Lq65ZGYXCIsXCJwaWRcIjo4LFwicmVtYXJrXCI6XCJvcmc6cXVlcnk6dXNlclwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJmdW5jOmFkZFwiLFwiaWRcIjoxMSxcImxldmVsXCI6NCxcIm5hbWVcIjpcIua3u-WKoOWKn-iDvVwiLFwicGlkXCI6NyxcInJlbWFya1wiOlwiZnVuYzphZGRcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwiZnVuYzphZGQ6YnRuXCIsXCJpZFwiOjEzLFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5re75Yqg5oyJ6ZKuXCIsXCJwaWRcIjo3LFwicmVtYXJrXCI6XCJmdW5jOmFkZDpidG5cIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwiZnVuYzp1cGRhdGVcIixcImlkXCI6MTQsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLkv67mlLlcIixcInBpZFwiOjcsXCJyZW1hcmtcIjpcImZ1bmM6dXBkYXRlXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcImZ1bmM6ZGVsZXRlXCIsXCJpZFwiOjE1LFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5Yig6ZmkXCIsXCJwaWRcIjo3LFwicmVtYXJrXCI6XCJmdW5jOmRlbGV0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJmdW5jOmJ0bjp1cGRhdGVcIixcImlkXCI6MTYsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmjInpkq4gLSDkv67mlLlcIixcInBpZFwiOjcsXCJyZW1hcmtcIjpcImZ1bmM6YnRuOnVwZGF0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJmdW5jOmJ0bjpkZWxldGVcIixcImlkXCI6MTcsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmjInpkq4gLSDnp7vpmaRcIixcInBpZFwiOjcsXCJyZW1hcmtcIjpcImZ1bmM6YnRuOmRlbGV0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJmdW5jOnF1ZXJ5XCIsXCJpZFwiOjI5LFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5p-l6K-iXCIsXCJwaWRcIjo3LFwicmVtYXJrXCI6XCJmdW5jOnF1ZXJ5XCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcInJvbGU6YWRkXCIsXCJpZFwiOjMwLFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5re75Yqg6KeS6ImyXCIsXCJwaWRcIjoxMCxcInJlbWFya1wiOlwicm9sZTphZGRcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwicm9sZTpiYXRjaDpyZW1vdmVcIixcImlkXCI6MzEsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmibnph4_liKDpmaRcIixcInBpZFwiOjEwLFwicmVtYXJrXCI6XCJyb2xlOmJhdGNoOnJlbW92ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJyb2xlOmFwcGx5OnBlcm1pc3Npb25cIixcImlkXCI6MzIsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLliIbphY3mnYPpmZBcIixcInBpZFwiOjEwLFwicmVtYXJrXCI6XCJyb2xlOmFwcGx5OnBlcm1pc3Npb25cIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwicm9sZTpxdWVyeVwiLFwiaWRcIjozMyxcImxldmVsXCI6NCxcIm5hbWVcIjpcIuafpeivolwiLFwicGlkXCI6MTAsXCJyZW1hcmtcIjpcInJvbGU6cXVlcnlcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwicm9sZTp1cGRhdGVcIixcImlkXCI6MzQsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLkv67mlLlcIixcInBpZFwiOjEwLFwicmVtYXJrXCI6XCJyb2xlOnVwZGF0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJyb2xlOmRlbGV0ZVwiLFwiaWRcIjozNSxcImxldmVsXCI6NCxcIm5hbWVcIjpcIuWIoOmZpFwiLFwicGlkXCI6MTAsXCJyZW1hcmtcIjpcInJvbGU6ZGVsZXRlXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcInVzZXI6YWRkXCIsXCJpZFwiOjM2LFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5re75Yqg55So5oi3XCIsXCJwaWRcIjoxMSxcInJlbWFya1wiOlwidXNlcjphZGRcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwidXNlcjpxdWVyeVwiLFwiaWRcIjozNyxcImxldmVsXCI6NCxcIm5hbWVcIjpcIuafpeivolwiLFwicGlkXCI6MTEsXCJyZW1hcmtcIjpcInVzZXI6cXVlcnlcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwidXNlcjphcHBseTpyb2xlXCIsXCJpZFwiOjM4LFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5YiG6YWN6KeS6ImyXCIsXCJwaWRcIjoxMSxcInJlbWFya1wiOlwidXNlcjphcHBseTpyb2xlXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcInVzZXI6dXBkYXRlXCIsXCJpZFwiOjM5LFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5L-u5pS5XCIsXCJwaWRcIjoxMSxcInJlbWFya1wiOlwidXNlcjp1cGRhdGVcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwidXNlcjpkZWxldGVcIixcImlkXCI6NDAsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLms6jplIBcIixcInBpZFwiOjExLFwicmVtYXJrXCI6XCJ1c2VyOmRlbGV0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJvcmc6YWRkXCIsXCJpZFwiOjE4LFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5re75Yqg57uE57uH5py65p6EXCIsXCJwaWRcIjo4LFwicmVtYXJrXCI6XCJvcmc6YWRkXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcIm9yZzphZGQ6Y2hpbGRcIixcImlkXCI6MTksXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmt7vliqDlrZDmnLrmnoRcIixcInBpZFwiOjgsXCJyZW1hcmtcIjpcIm9yZzphZGQ6Y2hpbGRcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwiZnVuYzpiYXRjaDpkZWxcIixcImlkXCI6MTIsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmibnph4_liKDpmaRcIixcInBpZFwiOjcsXCJyZW1hcmtcIjpcImZ1bmM6YmF0Y2g6ZGVsXCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcIm9yZzp1cGRhdGVcIixcImlkXCI6MjEsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLkv67mlLlcIixcInBpZFwiOjgsXCJyZW1hcmtcIjpcIm9yZzp1cGRhdGVcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwib3JnOmRlbGV0ZVwiLFwiaWRcIjoyMixcImxldmVsXCI6NCxcIm5hbWVcIjpcIuWIoOmZpFwiLFwicGlkXCI6OCxcInJlbWFya1wiOlwib3JnOmRlbGV0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJwb3NpdGlvbjphZGRcIixcImlkXCI6MjMsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmt7vliqDogYzliqFcIixcInBpZFwiOjksXCJyZW1hcmtcIjpcInBvc2l0aW9uOmFkZFwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJwb3NpdGlvbjpiYXRjaDpyZW1vdmVcIixcImlkXCI6MjQsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmibnph4_liKDpmaRcIixcInBpZFwiOjksXCJyZW1hcmtcIjpcInBvc2l0aW9uOmJhdGNoOnJlbW92ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJwb3NpdGlvbjp1cGRhdGVcIixcImlkXCI6MjUsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLkv67mlLlcIixcInBpZFwiOjksXCJyZW1hcmtcIjpcInBvc2l0aW9uOnVwZGF0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJwb3NpdGlvbjpkZWxldGVcIixcImlkXCI6MjYsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLliKDpmaRcIixcInBpZFwiOjksXCJyZW1hcmtcIjpcInBvc2l0aW9uOmRlbGV0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJwb3NpdGlvbjpxdWVyeVwiLFwiaWRcIjoyNyxcImxldmVsXCI6NCxcIm5hbWVcIjpcIuafpeivolwiLFwicGlkXCI6OSxcInJlbWFya1wiOlwicG9zaXRpb246cXVlcnlcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwibG9nOmxvZ2luOnF1ZXJ5XCIsXCJpZFwiOjQxLFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi5p-l6K-iXCIsXCJwaWRcIjoxMixcInJlbWFya1wiOlwibG9nOmxvZ2luOnF1ZXJ5XCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcInN5czphZGRcIixcImlkXCI6MSxcImxldmVsXCI6NCxcIm5hbWVcIjpcIua3u-WKoOezu-e7n1wiLFwicGlkXCI6NSxcInJlbWFya1wiOlwic3lzOmFkZFwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJzeXM6YmF0Y2g6ZGVsXCIsXCJpZFwiOjIsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLmibnph4_liKDpmaRcIixcInBpZFwiOjUsXCJyZW1hcmtcIjpcInN5czpiYXRjaDpkZWxcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwic3lzOmJpbmQ6bWVudVwiLFwiaWRcIjozLFwibGV2ZWxcIjo0LFwibmFtZVwiOlwi57uR5a6a6I-c5Y2VXCIsXCJwaWRcIjo1LFwicmVtYXJrXCI6XCJzeXM6YmluZDptZW51XCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcInN5czp1cGRhdGVcIixcImlkXCI6NCxcImxldmVsXCI6NCxcIm5hbWVcIjpcIuS_ruaUuVwiLFwicGlkXCI6NSxcInJlbWFya1wiOlwic3lzOnVwZGF0ZVwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJzeXM6ZGVsZXRlXCIsXCJpZFwiOjUsXCJsZXZlbFwiOjQsXCJuYW1lXCI6XCLliKDpmaRcIixcInBpZFwiOjUsXCJyZW1hcmtcIjpcInN5czpkZWxldGVcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwibWVudTpiaW5kOnN5c1wiLFwiaWRcIjoxMCxcImxldmVsXCI6NCxcIm5hbWVcIjpcIue7keWumuezu-e7n1wiLFwicGlkXCI6NixcInJlbWFya1wiOlwibWVudTpiaW5kOnN5c1wiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJTXzlfTV84XCIsXCJpZFwiOjgsXCJsZXZlbFwiOjIsXCJuYW1lXCI6XCJEYXNoYm9hcmRcIixcInBpZFwiOjksXCJyZW1hcmtcIjpcIlNfOV9NXzhcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwiaW5kZXhcIixcImlkXCI6MTQsXCJsZXZlbFwiOjMsXCJuYW1lXCI6XCLkuLvmjqflj7BcIixcInBpZFwiOjgsXCJyZW1hcmtcIjpcImluZGV4XCIsXCJ1cmxcIjpcIi9cIn0se1wiYXV0aG9yaXR5XCI6XCJzeXNcIixcImlkXCI6NSxcImxldmVsXCI6MyxcIm5hbWVcIjpcIuezu-e7n-euoeeQhlwiLFwicGlkXCI6OSxcInJlbWFya1wiOlwic3lzXCIsXCJ1cmxcIjpcIi9zeXNWaWV3XCJ9LHtcImF1dGhvcml0eVwiOlwiU185X01fOVwiLFwiaWRcIjo5LFwibGV2ZWxcIjoyLFwibmFtZVwiOlwi57O757uf6LWE5rqQ566h55CGXCIsXCJwaWRcIjo5LFwicmVtYXJrXCI6XCJTXzlfTV85XCIsXCJ1cmxcIjpcIlwifSx7XCJhdXRob3JpdHlcIjpcImxvZzpsb2dpblwiLFwiaWRcIjoxMixcImxldmVsXCI6MyxcIm5hbWVcIjpcIueZu-W9leaXpeW_l1wiLFwicGlkXCI6MTQsXCJyZW1hcmtcIjpcImxvZzpsb2dpblwiLFwidXJsXCI6XCIvbG9nL2xvZ2luVmlld1wifSx7XCJhdXRob3JpdHlcIjpcIm1lbnVcIixcImlkXCI6NixcImxldmVsXCI6MyxcIm5hbWVcIjpcIuiPnOWNleeuoeeQhlwiLFwicGlkXCI6OSxcInJlbWFya1wiOlwibWVudVwiLFwidXJsXCI6XCIvbWVudVZpZXdcIn0se1wiYXV0aG9yaXR5XCI6XCJTXzlfTV8xMVwiLFwiaWRcIjoxMSxcImxldmVsXCI6MixcIm5hbWVcIjpcIueUqOaIt-adg-mZkOeuoeeQhlwiLFwicGlkXCI6OSxcInJlbWFya1wiOlwiU185X01fMTFcIixcInVybFwiOlwiXCJ9LHtcImF1dGhvcml0eVwiOlwiZnVuY1wiLFwiaWRcIjo3LFwibGV2ZWxcIjozLFwibmFtZVwiOlwi5Yqf6IO9566h55CGXCIsXCJwaWRcIjo5LFwicmVtYXJrXCI6XCJmdW5jXCIsXCJ1cmxcIjpcIi9mdW5jVmlld1wifSx7XCJhdXRob3JpdHlcIjpcIlNfOV9NXzE0XCIsXCJpZFwiOjE0LFwibGV2ZWxcIjoyLFwibmFtZVwiOlwi5pel5b-X566h55CGXCIsXCJwaWRcIjo5LFwicmVtYXJrXCI6XCJTXzlfTV8xNFwiLFwidXJsXCI6XCJcIn0se1wiYXV0aG9yaXR5XCI6XCJvcmdcIixcImlkXCI6OCxcImxldmVsXCI6MyxcIm5hbWVcIjpcIue7hOe7h-acuuaehOeuoeeQhlwiLFwicGlkXCI6MTEsXCJyZW1hcmtcIjpcIm9yZ1wiLFwidXJsXCI6XCIvb3JnVmlld1wifSx7XCJhdXRob3JpdHlcIjpcInBvc2l0aW9uXCIsXCJpZFwiOjksXCJsZXZlbFwiOjMsXCJuYW1lXCI6XCLogYzliqHnrqHnkIZcIixcInBpZFwiOjExLFwicmVtYXJrXCI6XCJwb3NpdGlvblwiLFwidXJsXCI6XCIvcG9zaXRpb25WaWV3XCJ9LHtcImF1dGhvcml0eVwiOlwicm9sZVwiLFwiaWRcIjoxMCxcImxldmVsXCI6MyxcIm5hbWVcIjpcIuinkuiJsuadg-mZkOeuoeeQhlwiLFwicGlkXCI6MTEsXCJyZW1hcmtcIjpcInJvbGVcIixcInVybFwiOlwiL3JvbGVWaWV3XCJ9LHtcImF1dGhvcml0eVwiOlwidXNlclwiLFwiaWRcIjoxMSxcImxldmVsXCI6MyxcIm5hbWVcIjpcIueUqOaIt-euoeeQhlwiLFwicGlkXCI6MTEsXCJyZW1hcmtcIjpcInVzZXJcIixcInVybFwiOlwiL3VzZXJWaWV3XCJ9XSIsImp0aSI6ImFHRnlaV1J2ZERveE5qZzVPRE0wTmpVdyJ9.C-Sd4Klx3vvbifZs17af90VbYb1mluuLynywq42QzFU";
            System.out.println("Original JWT Token: " + originalJWTToken);

            // 压缩JWT令牌
            String compressedJWTToken = compressJWTToken(originalJWTToken);
            System.out.println("Compressed JWT Token: " + compressedJWTToken);
            System.out.println(compressedJWTToken.length());

            // 解压缩JWT令牌
            String decompressedJWTToken = decompressJWTToken(compressedJWTToken);
            System.out.println("Decompressed JWT Token: " + decompressedJWTToken);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
